from exts import db
from datetime import datetime
from sqlalchemy import text
from sqlalchemy.dialects.mysql import LONGBLOB

# 板块模型 （分类-按 门）
# 保留 储存门的分类 手动添加
class BoardModel(db.Model):
  __tablename__ = 'board'
  id = db.Column(db.Integer, primary_key=True, autoincrement=True) # 保留
  name = db.Column(db.String(20), nullable=False) # 门 phylum
  create_time = db.Column(db.DateTime, default=datetime.now) # 时间
  is_active = db.Column(db.Boolean, default=True) # 是否有效


# 内容模型 （物种）
# 保留 物种表  species
class PostModel(db.Model):
  __tablename__ = 'species'
  id = db.Column(db.Integer, primary_key=True, autoincrement=True) # 保留 编号
  name = db.Column(db.String(200), nullable=False) # 保留 物种名 原title
  scientific_name = db.Column(db.String(200),nullable=False) # 拉丁名
  phylum = db.Column(db.String(100),nullable=False) # 门
  class_ = db.Column(db.String(100),nullable=False) # 纲
  order = db.Column(db.String(100),nullable=False) # 目
  family = db.Column(db.String(100),nullable=False) # 科
  content = db.Column(db.Text, nullable=False) # 保留 描述


  create_time = db.Column(db.DateTime, default=datetime.now) # 保留 创建时间（或发现时间）
  read_count = db.Column(db.Integer,default=0) # 保留，可以计算阅读量
  is_active = db.Column(db.Boolean, default=True) # 保留 是否有效
  board_id = db.Column(db.Integer, db.ForeignKey("board.id")) # 保留  所属类别（门）
  author_id = db.Column(db.String(100),nullable=True) # 删除 不显示 , db.ForeignKey("user.id"),
  discoverer = db.Column(db.String(100),nullable=True) # 发现人

  board = db.relationship("BoardModel", backref="posts") # 保留 所属类别（门）
  # author = db.relationship("UserModel", backref='posts') # 删除 不显示


# 评论模型 (发布)
# 保留 用户发布信息
class CommentModel(db.Model):
  __tablename__ = 'comment'
  id = db.Column(db.Integer, primary_key=True, autoincrement=True) # 保留
  place_found = db.Column(db.String(50),nullable=False) # 发现地点
  create_time = db.Column(db.DateTime, default=datetime.now) # 保留 发现时间
  content = db.Column(db.Text, nullable=False) # 保留 描述
  image_data = db.Column(LONGBLOB,nullable=True) # 图片
  image_name = db.Column(db.String(100),nullable=True) # 图片名
  is_active = db.Column(db.Boolean, default=True) # 保留
  species_id = db.Column(db.Integer, db.ForeignKey("species.id")) # 保留
  author_id = db.Column(db.String(100), db.ForeignKey("user.id"), nullable=False) # 保留

  post = db.relationship("PostModel", backref=db.backref('comments',order_by=create_time.desc(),lazy="dynamic"))
  author = db.relationship("UserModel", backref='comments')


# 植物分类模型 （分类-按 门）
# 保留 储存门的分类 手动添加
class PlantBoardModel(db.Model):
  __tablename__ = 'plant_board'
  id = db.Column(db.Integer, primary_key=True, autoincrement=True) # 保留
  name = db.Column(db.String(20), nullable=False) # 门 phylum
  create_time = db.Column(db.DateTime, default=datetime.now) # 时间
  is_active = db.Column(db.Boolean, default=True) # 是否有效

# 内容模型 （植物物种）
# 保留 植物物种表  species
class PlantPostModel(db.Model):
  __tablename__ = 'plant_species'
  id = db.Column(db.Integer, primary_key=True, autoincrement=True) # 保留 编号
  name = db.Column(db.String(200), nullable=False) # 保留 物种名 原title
  phylum = db.Column(db.String(100),nullable=False) # 门
  family = db.Column(db.String(100), nullable=False)  # 科
  genus = db.Column(db.String(100),nullable=False) # 属
  content = db.Column(db.Text, nullable=True)  # 保留 描述
  # scientific_name = db.Column(db.String(200),nullable=False) # 拉丁名
  #class_ = db.Column(db.String(100),nullable=False) # 纲
  #order = db.Column(db.String(100),nullable=False) # 目

  create_time = db.Column(db.DateTime, default=datetime.now) # 保留 创建时间（或发现时间）
  read_count = db.Column(db.Integer,default=0) # 保留，可以计算阅读量
  is_active = db.Column(db.Boolean, default=True) # 保留 是否有效
  board_id = db.Column(db.Integer, db.ForeignKey("plant_board.id")) # 保留  所属类别（门）
  author_id = db.Column(db.String(100),nullable=True) # 删除 不显示 , db.ForeignKey("user.id"),
  discoverer = db.Column(db.String(100),nullable=True) # 发现人

  board = db.relationship("PlantBoardModel", backref="posts") # 保留 所属类别（门）
  # author = db.relationship("UserModel", backref='posts') # 删除 不显示

